#include "Peristele.h"

CPeristele::CPeristele(HGE* hge, size_t x, size_t y, bool u, bool d, bool l, bool r)
:m_pHge(hge), m_pSelf(NULL), m_bEnd(false)
, m_gridX(x), m_gridY(y)
{
	if(hge)
	{
		m_pSelf = new CMapUnit(hge,PERISTELE_PNG,x,y,true);
		m_pSelf->SetZBuffer(LEVEL_3);
		m_bLeaf[0] = u;
		m_bLeaf[1] = d;
		m_bLeaf[2] = l;
		m_bLeaf[3] = r;
	}
}

CPeristele::~CPeristele(void)
{
	if(m_pSelf)
		delete m_pSelf;
	m_pSelf = NULL;
}

bool CPeristele::DoFrame()
{
	return false;
}

bool CPeristele::DoRender()
{
	if(m_pSelf)
		m_pSelf->DoRender();

	return false;
}

bool CPeristele::ImpactTest( float x, float y )
{
	hgeRect rectPlayer(x,y,x+UNIT_W,y+UNIT_H);
	hgeRect rectSel(m_pSelf->GetX(),m_pSelf->GetY(),m_pSelf->GetX()+UNIT_W,m_pSelf->GetY()+UNIT_H);

	if(rectPlayer.Intersect(&rectSel))
	{
// 		switch(player->GetDirection())
// 		{
// 		case DIR_UP:
// 			if(m_pLeaf[DIR_DOWN] == NULL)
// 			{
// 				CreateLeaf(false,true,false,false);
// 			}
// 			break;
// 		case DIR_DOWN:
// 			if(m_pLeaf[DIR_UP] == NULL)
// 			{
// 				CreateLeaf(true,false,false,false);
// 			}
// 			break;
// 		case DIR_LEFT:
// 			if(m_pLeaf[DIR_RIGHT] == NULL)
// 			{
// 				CreateLeaf(false,false,false,true);
// 			}
// 			break;
// 		case DIR_RIGHT:
// 			if(m_pLeaf[DIR_LEFT] == NULL)
// 			{
// 				CreateLeaf(false,false,true,false);
// 			}
// 			break;
// 		default:
// 			break;
// 		}
// 		OnActive(true);

		return true;
	}
	else
		return false;
}

// void CPeristele::UpdateLeaf( bool u, bool d, bool l, bool r )
// {
// 	if(u && m_gridY > 0)
// 	{
// 		m_pLeaf[DIR_UP] = new CMapUnit(m_pHge,LEAF_PNG,m_gridX,m_gridY-1,false);
// 		m_pLeaf[DIR_UP]->SetZBuffer(LEVEL_3);
// 	}
// 	if(d && m_gridY < UNIT_ROW-1)
// 	{
// 		m_pLeaf[DIR_DOWN] = new CMapUnit(m_pHge,LEAF_PNG,m_gridX,m_gridY+1,false);
// 		m_pLeaf[DIR_DOWN]->SetZBuffer(LEVEL_3);
// 	}
// 	if(l && m_gridX > 0)
// 	{
// 		m_pLeaf[DIR_LEFT] = new CMapUnit(m_pHge,LEAF_PNG,m_gridX-1,m_gridY,false);
// 		m_pLeaf[DIR_LEFT]->SetZBuffer(LEVEL_3);
// 	}
// 	if(r && m_gridX < UNIT_COL-1)
// 	{
// 		m_pLeaf[DIR_RIGHT] = new CMapUnit(m_pHge,LEAF_PNG,m_gridX+1,m_gridY,false);
// 		m_pLeaf[DIR_RIGHT]->SetZBuffer(LEVEL_3);
// 	}
// }

// bool CPeristele::PointTest(float x, float y, CPlayer* player)
// {
// 	if(player)
// 	{
// 		for(int i = 0; i < 4; i++)
// 		{
// 			if(m_pLeaf[i])
// 			{
// 				hgeRect rectSel(m_pLeaf[i]->GetX(),m_pLeaf[i]->GetY(),m_pLeaf[i]->GetX()+UNIT_W,m_pLeaf[i]->GetY()+UNIT_H);
// 				if(rectSel.TestPoint(x,y))
// 				{
// 					player->MoveTo(m_pLeaf[i]->GetX(),m_pLeaf[i]->GetY());
// 					player->SetDirection(i);
// 					OnActive(false);
// 					delete m_pLeaf[i];
// 					m_pLeaf[i] = NULL;
// 					return true;
// 				}
// 			}
// 		}
// 	}
// 
// 	return false;
// }

bool CPeristele::IsGrid( size_t x, size_t y )
{
	if((x == m_gridX) && (y == m_gridY))
		return true;
	else
		return false;
}